package cn.itcast.service.cargo.impl;

import cn.itcast.dao.cargo.ContractDao;
import cn.itcast.domain.cargo.Contract;
import cn.itcast.domain.cargo.ContractExample;
import cn.itcast.domain.cargo.ContractProductVo;
import cn.itcast.service.cargo.ContractService;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;
import java.util.List;
import java.util.UUID;

@Service
public class ConteractServiceImpl implements ContractService {

    @Autowired
    private ContractDao contractDao;
    /*
        保存购销合同
     */
    public void save(Contract contract) {
        //设置ID值
        contract.setId(UUID.randomUUID().toString());
        //设置当前状态的初始化值 0
        contract.setState(0);
        //设置货物的数量
        contract.setProNum(0);
        //设置附件的数量
        contract.setExtNum(0);
        //设置总金额
        contract.setTotalAmount(0.0);
        //设置创建时间
        contract.setCreateTime(new Date());
        //调用contractDao中的保存方法
        contractDao.insertSelective(contract);
    }

    /*
        修改购销合同
     */
    public void update(Contract contract) {
        //调用contractDao中根据ID修改的方法
        contractDao.updateByPrimaryKeySelective(contract);
    }

    /*
        删除购销合同
    */
    public void delete(String id) {
        //调用contractDao中的删除的方法，根据合同ID删除合同
        contractDao.deleteByPrimaryKey(id);
    }

    /*
        根据ID查询合同
     */
    public Contract findById(String id) {
        //根据ID查询数据
        Contract contract = contractDao.selectByPrimaryKey(id);
        return contract;
    }

    /*
        分页查询购销合同
     */
    public PageInfo findAll(int page, int size, ContractExample example) {
        //PageHelper中设置参数
        PageHelper.startPage(page,size);
        //查询所有
        List<Contract> list = contractDao.selectByExample(example);
        return new PageInfo(list);
    }

    @Override
    public List<ContractProductVo> findByShipTime(String s) {
        //调用contractDao根据船期查询数据
        return contractDao.findByShipTime(s);
    }

    /*
        确认提交合同数据，修改合同状态
     */
    public void submit(String id) {
        //根据ID查询合同数据
        Contract contract = contractDao.selectByPrimaryKey(id);
        //修改合同状态
        contract.setState(1);
        //保存修改后的合同数据
        contractDao.updateByPrimaryKeySelective(contract);
    }

    /*
        取消合同的上传
       修改合同状态
     */
    public void cancel(String id) {
        //根据合同ID查询合同数据
        Contract contract = contractDao.selectByPrimaryKey(id);
        contract.setState(0);
        //保存修改后的合同数据
        contractDao.updateByPrimaryKeySelective(contract);
    }


}
